package vip.xiaonuo.common.util;


import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

/**
 * @author zjt
 * @description 自定义脱敏工具类
 * @date 2024/10/16 18:21
 */
@Slf4j
public class CommonSensitiveUtil {
    /**
     * 隐藏手机号码中间四位
     *
     * @param phone 原始手机号码
     * @return 脱敏后的手机号码
     */
    public static String sensitivePhone(String phone) {
        try {
            if (StringUtils.isBlank(phone)) {
                return null;
            }
            return phone.substring(0, 3) + "****" + phone.substring(7);
        } catch (Exception e) {
            log.warn("脱敏失败：{}", phone);
            return phone;
        }
    }

    /**
     * 隐藏身份证号码中间部分数字
     *
     * @param idCard 原始身份证号码
     * @return 脱敏后的身份证号码
     */
    public static String sensitiveIdCard(String idCard) {
        if (StringUtils.isBlank(idCard)) {
            return null;
        }
        String prefix = idCard.substring(0, 6);
        String suffix = idCard.substring(idCard.length() - 4);
        StringBuilder sb = new StringBuilder();
        sb.append(prefix);
        for (int i = 0; i < (idCard.length() - 10); i++) {
            sb.append("*");
        }
        sb.append(suffix);
        return sb.toString();
    }

    /**
     * 隐藏银行卡号大部分数字，只显示前四位和后四位
     *
     * @param bankCard 原始银行卡号
     * @return 脱敏后的银行卡号
     */
    public static String sensitiveBankCard(String bankCard) {
        if (bankCard == null || bankCard.length() < 8) {
            throw new IllegalArgumentException("Invalid bank card number");
        }
        return bankCard.substring(0, 4) + "************" + bankCard.substring(bankCard.length() - 4);
    }

    /**
     * 隐藏字符串中指定位置的字符，用指定字符替换
     *
     * @param originalStr 原始字符串
     * @param start       开始位置（包含）
     * @param end         结束位置（不包含）
     * @return 脱敏后的字符串
     */
    public static String sensitiveString(String originalStr, int start, int end) {
        if (originalStr == null || start < 0 || end > originalStr.length() || start > end) {
            return originalStr;
        }
        char[] chars = originalStr.toCharArray();
        for (int i = start; i < end; i++) {
            chars[i] = '*';
        }
        return new String(chars);
    }
}
